package cn.yc.sgg.fanxin;

import org.junit.jupiter.api.Test;

class Student<T extends Number> {
    String name;
    String age;

    public Student() {
    }

    public Student(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

public class fan_xin {
    @Test
    public void fan_xin() {
        Student<Integer> 张三 = new Student<Integer>("张三", "18");
        Student<Double> doubleStudent = new Student<>();
        // 此处String不是Number的子类，所以是报错
//        Student<String> stringStudent = new Student<String>();

    }

    class NewStudent<T extends Number & Cloneable> {
        // T必须指定一个既继承了Number又实现了Cloneable父接口的类
    }

    // 最后需要注意的是，泛型中指定上限只能用extends不能用implements
    // 这个跟指定父类和实现父类不同


    // ==============================================================================================================
    // 泛型方法
    @Test
    public void fan_xing_method() {

    }
    /*
    泛型方法
    语法格式： 修饰符 <泛型> 返回值类型 方法名(形参列表[]) {}
    <泛型>中的类型可以是一个或多个
    泛型如果没有指定上限（所谓上限就是extends的那些顶级范围类）则默认是Object
    如果有多个上限，则多个上限之间用 & 隔开，并且父类在前，父接口在后
    最多只能指定一个父类上限

         */



}
